package controle;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import bean.Feriado;
import dao.FeriadoDAO;
import frame.FeriadosFrame;
import java.util.*;

public class PrevisaoPJ {
	
        public static Date addDias(Date date, int dias) {

            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(Calendar.DATE, dias);

            return calendar.getTime();

        }
    
	public Map<String, Integer> previsao( Date dtIniPrm, Date dtFimPrm ){
		
		Map<String, Integer> mapa = new HashMap<String, Integer>();
                
                dtFimPrm = addDias(dtFimPrm, 1);
		
		try {   FeriadoDAO dao = new FeriadoDAO();
			SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
			GregorianCalendar dtFim = new GregorianCalendar( );
			GregorianCalendar dtIni = new GregorianCalendar();
                        List<Feriado> lista_feriados =  new ArrayList<Feriado>();
                        List<String> lista_datas =  new ArrayList<String>();
                        
                        java.sql.Date dataini = new java.sql.Date( dtIniPrm.getTime() );  
                        java.sql.Date datafim = new java.sql.Date( dtFimPrm.getTime() );  
                        
			dtFim.setTime( dtFimPrm );
			dtIni.setTime( dtIniPrm );
       
                        lista_feriados = dao.listaPeriodo( dataini, datafim );
                        
                        for (Feriado f : lista_feriados) {
                            lista_datas.add( df.format( f.getData()));
                        }
			                        
			int dif = 0, sunday = 0, saturday = 0, feriado=0;

                        while (  dtIni.compareTo(dtFim) != 0 ) {
				dtIni.add(GregorianCalendar.DAY_OF_MONTH, 1);
				
				if (dtIni.get(GregorianCalendar.DAY_OF_WEEK) != GregorianCalendar.SUNDAY && dtIni.get(GregorianCalendar.DAY_OF_WEEK) != GregorianCalendar.SATURDAY)
					dif++;

				if (dtIni.get(GregorianCalendar.DAY_OF_WEEK) == GregorianCalendar.SUNDAY)
					sunday++;

				if (dtIni.get(GregorianCalendar.DAY_OF_WEEK) == GregorianCalendar.SATURDAY)
					saturday++;
				
				if ( lista_datas.contains( df.format( dtIni.getTime()))){
                                        feriado++;					
				}
			}
			mapa.put("domingos", sunday);
			mapa.put("sabados", saturday);
			mapa.put("semana", dif);
			mapa.put("feriados", feriado);
			
		} catch (Exception e) {
			System.out.println(e);
			System.exit(0);
		}
		return mapa;
	}

}
